package com.ktwlsoft.archivemanage.domain.dao.repository;

import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import com.ktwlsoft.archivemanage.domain.dao.entity.ArchiveUnitDetail;
import com.ktwlsoft.archivemanage.payload.security.ArchiveUnitResponse;
import com.ktwlsoft.archivemanage.payload.unitArchive.UnitAndArchivist;
import org.apache.ibatis.annotations.Mapper;
import com.ktwlsoft.archivemanage.domain.dao.entity.ArchiveUnit;
import org.springframework.stereotype.Repository;

/**
 * archive_unit--立档单位
 *
 * @author zhuhe on 2019-10-24 14:19:39
 * @version 1.0
 */
@Mapper
@Repository
public interface IArchiveUnitMapper {
	
	/**
	 * 查询列表 on 2019-10-24 14:19:39
	 * @param archiveUnit archiveUnit
	 * @return List<ArchiveUnit>
	 */
	List<ArchiveUnit> findList(ArchiveUnit archiveUnit);

	/**
	 * 查询下拉集合 on 2019-10-24 14:19:39
	 *
	 * @param jsonObject jsonObject
	 * @return List<ArchiveUnit>
	 */
	List<JSONObject> findListAll(JSONObject jsonObject);
	
	/**
	 * 根据id查询信息 on 2019-10-24 14:19:39
	 * @param id id
	 * @return ArchiveUnit
	 */
	ArchiveUnit getById(Long id);

	/**
	  * 根据账号id查询信息 on 2019/10/31 12:13
	  *
	  * @param accountId accountId
	  * @return ArchiveUnit
	  */
	ArchiveUnit getByAccountId(Long accountId);

	/**
	  * 根据账户查询信息 on 2019/10/24 18:00
	  *
	  * @param account account
	  * @return ArchiveUnit
	  */
	ArchiveUnit getByAccount(String account);
	
	/**
	 * 根据id删除信息 on 2019-10-24 14:19:39
	 * @param id id
	 * @return int
	 */
	int deleteById(Long id);
	
	/**
	 * 根据id集合批量删除信息 on 2019-10-24 14:19:39
	 * @param ids ids
	 * @return int
	 */
	int deleteByIds(List<Long> ids);
	


	/**
	 * 插入 on 2019-10-24 14:19:39
	 * @param archiveUnit archiveUnit
	 * @return int
	 */
    int insert(ArchiveUnit archiveUnit);

	/**
	 * 更新 on 2019-10-24 14:19:39
	 * @param archiveUnit archiveUnit
	 * @return int
	 */
    int update(ArchiveUnit archiveUnit);

	/**
	 * 根据条件查询上级立档单位列表
	 * @param data 查询条件
	 * @return List<ArchiveUnitDetail>
	 */
	List<ArchiveUnitDetail> findArchiveUnitList(Map<String,Object> data);

	/**
	 * 查询下级立档单位列表
	 * @param unitId 上级立档单位id
	 * @return List<ArchiveUnitDetail>
	 */
	List<ArchiveUnitDetail> findSubArchiveUnitList(Long unitId);

	/**
	  * 根据名称查询 on 2020/1/20 16:32
	  *
	  * @param data data
	  * @return List<ArchiveUnitDetail>
	  */
	List<ArchiveUnitDetail> findSubByUnitName(Map<String, Object> data);

	/**
	 * 查询上级立档单位列表
	 * @param unitId 下级立档单位id
	 * @return ArchiveUnitDetail
	 */
	 ArchiveUnitDetail findParentArchiveUnitList(Long unitId);

	/**
	 * 查询所有层级的立档单位列表
	 * @param data
	 * @return List<ArchiveUnitDetail>
	 */
	List<ArchiveUnitDetail> findAllArchiveUnitList(Map<String,Object> data);

	/**
	 * 查询立档单位详情
	 * @param unitId 立档单位id
	 * @return ArchiveUnitDetail
	 */
	ArchiveUnitDetail findArchiveUnitInfoById(Long unitId);

	/**
	 * 根据立档单位名称查询已有立档单位
	 * @param unitName
	 * @return Integer
	 */
	Integer findByUnitName(String unitName);

	/**
	 * 根据立档单位id删除立档单位
	 * @param unitId
	 * @return int
	 */
	int deleteArchiveUnit(Long unitId);

	/**
	 * 新增立档单位信息
	 * @param archiveUnit
	 * @return int
	 */
	int addArchiveUnitInfo(ArchiveUnit archiveUnit);

	/**
	 * 新增上级立档单位信息
	 * @param parentArchiveUnit
	 * @return int
	 */
	int addParentArchiveUnitInfo(ArchiveUnit parentArchiveUnit);

	/**
	 * 更新立档单位信息
	 * @param archiveUnit
	 * @return int
	 */
	int updateArchiveUnitInfo(ArchiveUnit archiveUnit);

    ArchiveUnitResponse findArchiveUnitResponse(String account);

	Long existByUnitAccountOrTele(String unitAccountOrTele);

    List<UnitAndArchivist> findByQuestionTitle(String title);

	List<ArchiveUnitDetail> findFirstLevelUnitThatHasLevel2();

	List<ArchiveUnitDetail> findSubArchiveUnitListByPId(Long pid);
}
